//
// Created by 张越洋666 on 2025/11/8.
//
#include "admin_zsgc.h"
#include <string.h>
#include"database.h"
//
//int login_admin_user(char *phone, char *password) {
//    const char *sql_query = "select id, password from admin where phone = ?;";
//    sqlite3_stmt *stmt = NULL;
//    int rc = sqlite3_prepare_v2(db, sql_query, -1, &stmt, NULL); // 传入正确的 sql_query
//    if (rc != SQLITE_OK) {
//        fprintf(stderr, "查询预处理失败: %s\n", sqlite3_errmsg(db)); // 用 sqlite3_errmsg 获取错误
//        return -3; // 预处理失败，属于查询错误
//    }
//
//    // 绑定手机号参数，并检查绑定结果
//    rc = sqlite3_bind_text(stmt, 1, phone, -1, SQLITE_STATIC);
//    if (rc != SQLITE_OK) {
//        fprintf(stderr, "参数绑定失败: %s\n", sqlite3_errmsg(db));
//        sqlite3_finalize(stmt); // 释放 stmt
//        return -3;
//    }
//
//    rc = sqlite3_step(stmt);
//    if (rc == SQLITE_ROW) {
//        // 手机号存在，验证密码
//        const char *stored_password = (const char*)sqlite3_column_text(stmt, 1);
//        if (stored_password != NULL && strcmp(password, stored_password) == 0) {
//            printf("登录成功！\n");
//            sqlite3_finalize(stmt);
//            return 0; // 登录成功
//        } else {
//            printf("密码错误，请重新输入！\n");
//            sqlite3_finalize(stmt);
//            return -2; // 密码错误
//        }
//    } else if (rc == SQLITE_DONE) {
//         //没有查询到记录（手机号不存在）
//        printf("手机号未注册，请先注册！\n");
//        sqlite3_finalize(stmt);
//        return -1; // 手机号不存在
//         //没有查询到记录（手机号不存在）
//
//    } else {
//        // 其他查询错误
//        fprintf(stderr, "查询执行失败: %s\n", sqlite3_errmsg(db));
//        sqlite3_finalize(stmt);
//        return -3; // 查询错误
//    }
//}

//int logic_and_register() {
//    open_db();
//    create_admin_user();
//    char phone[12];
//    char password[12];
//    int attempt_count = 0;
//    const int max_attempts = 3;
//    // 循环控制登录尝试次数
//    while (attempt_count < max_attempts) {
//        // 每次循环都重新获取用户输入
//        printf("请输入手机号: ");
//        scanf(" %s", phone);
//        printf("请输入密码: ");
//        scanf(" %s", password);
//
//        // 每次输入后重新验证
//        int result = login_admin_user(phone, password);
//
//        switch (result) {
//            case 0: // 登录成功
//                printf("欢迎进入系统！\n");
//                return 0;
//            case -1: // 手机号不存在
//                printf("手机号未注册，是否注册？(y/n): ");
//                char choice;
//                scanf(" %c", &choice); // 等待用户输入y/n
//                if (choice == 'y' || choice == 'Y') {
//                    printf("跳转到注册页面...\n");
//                    ADMIN new_admin;  // 声明结构体变量
//                    int result;
//                    // 1. 准备要插入的管理员数据
//                    printf("请输入姓名: ");
//                    scanf("%49s", new_admin.name);  // 限制输入长度防止溢出
//
//                    printf("请输入手机号: ");
//                    scanf("%19s", new_admin.phone);
//
//                    printf("请输入密码: ");
//                    scanf("%49s", new_admin.password);
//
//                    // 2. 调用插入函数（传递结构体地址）
//                    result = insert_admin_user(&new_admin);
//
//                    // 3. 检查插入结果
//                    if (result == 0) {
//                        printf("注册成功！\n");
//                        // 注册成功后的处理
//                    } else {
//                        printf("注册失败！\n");
//                        // 注册失败后的处理
//                    }
//                    return result; // 返回操作结果
//                    return 0; // 正常退出
//                } else {
//                    // 用户选择不注册，退出循环
//                    return -4;
////                    attempt_count = max_attempts; // 强制退出循环
//                }
//                break;
//            case -2: // 密码错误
//                attempt_count++;
//                printf("密码错误，还剩%d次尝试机会\n", max_attempts - attempt_count);
//                if (attempt_count >= max_attempts) {
//                    printf("尝试次数过多，请稍后再试！\n");
//                    return -1;
//                }
//                break;
//            default:
//                printf("系统错误，请重试！\n");
//                break;
//        }
//    }
//
//    return 0;
//}
int login_admin_user(char *phone, char *password) {
    const char *sql_query = "select id, password from admin where phone = ?;";
    sqlite3_stmt *stmt = NULL;
    int rc = sqlite3_prepare_v2(db, sql_query, -1, &stmt, NULL); // 传入正确的 sql_query
    if (rc != SQLITE_OK) {
        fprintf(stderr, "查询预处理失败: %s\n", sqlite3_errmsg(db)); // 用 sqlite3_errmsg 获取错误
        return -3; // 预处理失败，属于查询错误
    }

    // 绑定手机号参数，并检查绑定结果
    rc = sqlite3_bind_text(stmt, 1, phone, -1, SQLITE_STATIC);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "参数绑定失败: %s\n", sqlite3_errmsg(db));
        sqlite3_finalize(stmt); // 释放 stmt
        return -3;
    }

    rc = sqlite3_step(stmt);
    if (rc == SQLITE_ROW) {
        // 手机号存在，验证密码
        const char *stored_password = (const char*)sqlite3_column_text(stmt, 1);
        if (stored_password != NULL && strcmp(password, stored_password) == 0) {
            printf("登录成功！\n");
            sqlite3_finalize(stmt);
            return 0; // 登录成功
        } else {
            printf("密码错误，请重新输入！\n");
            sqlite3_finalize(stmt);
            return -2; // 密码错误
        }
    } else if (rc == SQLITE_DONE) {
        //没有查询到记录（手机号不存在）
        printf("手机号未注册，请先注册！\n");
        sqlite3_finalize(stmt);
        return -1; // 手机号不存在
        //没有查询到记录（手机号不存在）

    } else {
        // 其他查询错误
        fprintf(stderr, "查询执行失败: %s\n", sqlite3_errmsg(db));
        sqlite3_finalize(stmt);
        return -3; // 查询错误
    }
}


int logic_and_register() {
    open_db();
    create_admin_user();
    char phone[12];
    char password[12];
    int attempt_count = 0;
    const int max_attempts = 3;

    // 循环控制登录尝试次数
    while (attempt_count < max_attempts) {
        // 每次循环都重新获取用户输入
        printf("请输入手机号: ");
        scanf(" %s", phone);
        printf("请输入密码: ");
        scanf(" %s", password);

        // 每次输入后重新验证
        int result = login_admin_user(phone, password);

        switch (result) {
            case 0: // 登录成功
                printf("欢迎进入系统！\n");
                return 0;

            case -1: // 手机号不存在
                printf("手机号未注册，是否注册？(y/n): ");
                char choice;
                scanf(" %c", &choice); // 等待用户输入y/n
                if (choice == 'y' || choice == 'Y') {
                    printf("跳转到注册页面...\n");
                    ADMIN new_admin;  // 声明结构体变量

                    // 1. 准备要插入的管理员数据
                    printf("请输入姓名: ");
                    scanf("%49s", new_admin.name);  // 限制输入长度防止溢出

                    printf("请输入手机号: ");
                    scanf("%19s", new_admin.phone);

                    printf("请输入密码: ");
                    scanf("%49s", new_admin.password);

                    // 2. 调用插入函数（传递结构体地址）
                    int register_result = insert_admin_user(&new_admin);

                    // 3. 检查插入结果
                    if (register_result == 0) {
                        printf("注册成功！即将返回登录页面...\n");
                        // 关键修改：注册成功后不清空attempt_count，继续循环
                        // 不执行return，让程序继续while循环
                    } else {
                        printf("注册失败！\n");
                        // 注册失败后也继续循环
                    }
                    // 注意：这里不要使用return，让循环继续
                } else {
                    // 用户选择不注册，退出循环
                    return -4;
//                    attempt_count = max_attempts; // 强制退出循环
                }
                break;

            case -2: // 密码错误
                attempt_count++;
                printf("密码错误，还剩%d次尝试机会\n", max_attempts - attempt_count);
                if (attempt_count >= max_attempts) {
                    printf("尝试次数过多，请稍后再试！\n");
                    close_db();
                    return -1;
                }
                break;

            default:
                printf("系统错误，请重试！\n");
                break;
        }
    }

    close_db();
    return 0;
}